(function () {

/* Imports */
var Meteor = Package.meteor.Meteor;
var global = Package.meteor.global;
var meteorEnv = Package.meteor.meteorEnv;
var Blaze = Package.blaze.Blaze;
var UI = Package.blaze.UI;
var Handlebars = Package.blaze.Handlebars;
var HTML = Package.htmljs.HTML;

/* Package-scope variables */
var E164;

(function(){

/////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                         //
// packages/steedos_e164-phones-countries/e164-phones-countries.js                         //
//                                                                                         //
/////////////////////////////////////////////////////////////////////////////////////////////
                                                                                           //
var PHONE_PREFIX = {
	1201: 'US',
	1202: 'US',
	1203: 'US',
	1204: 'CA',
	1205: 'US',
	1206: 'US',
	1207: 'US',
	1208: 'US',
	1209: 'US',
	1210: 'US',
	1212: 'US',
	1213: 'US',
	1214: 'US',
	1215: 'US',
	1216: 'US',
	1217: 'US',
	1218: 'US',
	1219: 'US',
	1224: 'US',
	1225: 'US',
	1226: 'CA',
	1228: 'US',
	1229: 'US',
	1231: 'US',
	1234: 'US',
	1236: 'CA',
	1239: 'US',
	1240: 'US',
	1242: 'BS',
	1246: 'BB',
	1248: 'US',
	1249: 'CA',
	1250: 'CA',
	1251: 'US',
	1252: 'US',
	1253: 'US',
	1254: 'US',
	1256: 'US',
	1260: 'US',
	1262: 'US',
	1264: 'AI',
	1267: 'US',
	1268: 'AG',
	1269: 'US',
	1270: 'US',
	1272: 'US',
	1274: 'US',
	1276: 'US',
	1281: 'US',
	1284: 'VG',
	1289: 'CA',
	1301: 'US',
	1302: 'US',
	1303: 'US',
	1304: 'US',
	1305: 'US',
	1306: 'CA',
	1307: 'US',
	1308: 'US',
	1309: 'US',
	1310: 'US',
	1312: 'US',
	1313: 'US',
	1314: 'US',
	1315: 'US',
	1316: 'US',
	1317: 'US',
	1318: 'US',
	1319: 'US',
	1320: 'US',
	1321: 'US',
	1323: 'US',
	1325: 'US',
	1330: 'US',
	1331: 'US',
	1334: 'US',
	1336: 'US',
	1337: 'US',
	1339: 'US',
	1340: 'VI',
	1343: 'CA',
	1345: 'KY',
	1346: 'US',
	1347: 'US',
	1351: 'US',
	1352: 'US',
	1360: 'US',
	1361: 'US',
	1364: 'US',
	1365: 'CA',
	1385: 'US',
	1386: 'US',
	1401: 'US',
	1402: 'US',
	1403: 'CA',
	1404: 'US',
	1405: 'US',
	1406: 'US',
	1407: 'US',
	1408: 'US',
	1409: 'US',
	1410: 'US',
	1412: 'US',
	1413: 'US',
	1414: 'US',
	1415: 'US',
	1416: 'CA',
	1417: 'US',
	1418: 'CA',
	1419: 'US',
	1423: 'US',
	1424: 'US',
	1425: 'US',
	1430: 'US',
	1431: 'CA',
	1432: 'US',
	1434: 'US',
	1435: 'US',
	1437: 'CA',
	1438: 'CA',
	1440: 'US',
	1441: 'BM',
	1442: 'US',
	1443: 'US',
	1450: 'CA',
	1457: 'CA',
	1458: 'US',
	1469: 'US',
	1470: 'US',
	1473: 'GD',
	1475: 'US',
	1478: 'US',
	1479: 'US',
	1480: 'US',
	1484: 'US',
	1500: 'US',
	1501: 'US',
	1502: 'US',
	1503: 'US',
	1504: 'US',
	1505: 'US',
	1506: 'CA',
	1507: 'US',
	1508: 'US',
	1509: 'US',
	1510: 'US',
	1512: 'US',
	1513: 'US',
	1514: 'CA',
	1515: 'US',
	1516: 'US',
	1517: 'US',
	1518: 'US',
	1519: 'CA',
	1520: 'US',
	1530: 'US',
	1531: 'US',
	1533: 'US',
	1534: 'US',
	1539: 'US',
	1540: 'US',
	1541: 'US',
	1544: 'US',
	1551: 'US',
	1559: 'US',
	1561: 'US',
	1562: 'US',
	1563: 'US',
	1566: 'US',
	1567: 'US',
	1570: 'US',
	1571: 'US',
	1573: 'US',
	1574: 'US',
	1575: 'US',
	1577: 'US',
	1579: 'CA',
	1580: 'US',
	1581: 'CA',
	1585: 'US',
	1586: 'US',
	1587: 'CA',
	1600: 'CA',
	1601: 'US',
	1602: 'US',
	1603: 'US',
	1604: 'CA',
	1605: 'US',
	1606: 'US',
	1607: 'US',
	1608: 'US',
	1609: 'US',
	1610: 'US',
	1612: 'US',
	1613: 'CA',
	1614: 'US',
	1615: 'US',
	1616: 'US',
	1617: 'US',
	1618: 'US',
	1619: 'US',
	1620: 'US',
	1623: 'US',
	1626: 'US',
	1628: 'US',
	1629: 'US',
	1630: 'US',
	1631: 'US',
	1636: 'US',
	1639: 'CA',
	1641: 'US',
	1646: 'US',
	1647: 'CA',
	1649: 'TC',
	1650: 'US',
	1651: 'US',
	1657: 'US',
	1660: 'US',
	1661: 'US',
	1662: 'US',
	1664: 'MS',
	1667: 'US',
	1669: 'US',
	1670: 'MP',
	1671: 'GU',
	1678: 'US',
	1681: 'US',
	1682: 'US',
	1684: 'AS',
	1700: 'US',
	1701: 'US',
	1702: 'US',
	1703: 'US',
	1704: 'US',
	1705: 'CA',
	1706: 'US',
	1707: 'US',
	1708: 'US',
	1709: 'CA',
	1710: 'US',
	1712: 'US',
	1713: 'US',
	1714: 'US',
	1715: 'US',
	1716: 'US',
	1717: 'US',
	1718: 'US',
	1719: 'US',
	1720: 'US',
	1721: 'SX',
	1724: 'US',
	1725: 'US',
	1727: 'US',
	1731: 'US',
	1732: 'US',
	1734: 'US',
	1737: 'US',
	1740: 'US',
	1747: 'US',
	1754: 'US',
	1757: 'US',
	1758: 'LC',
	1760: 'US',
	1762: 'US',
	1763: 'US',
	1765: 'US',
	1767: 'DM',
	1769: 'US',
	1770: 'US',
	1772: 'US',
	1773: 'US',
	1774: 'US',
	1775: 'US',
	1778: 'CA',
	1779: 'US',
	1780: 'CA',
	1781: 'US',
	1782: 'CA',
	1784: 'VC',
	1785: 'US',
	1786: 'US',
	1787: 'PR',
	1800: 'US',
	1801: 'US',
	1802: 'US',
	1803: 'US',
	1804: 'US',
	1805: 'US',
	1806: 'US',
	1807: 'CA',
	1808: 'US',
	1809: 'DO',
	1810: 'US',
	1812: 'US',
	1813: 'US',
	1814: 'US',
	1815: 'US',
	1816: 'US',
	1817: 'US',
	1818: 'US',
	1819: 'CA',
	1825: 'CA',
	1828: 'US',
	1829: 'DO',
	1830: 'US',
	1831: 'US',
	1832: 'US',
	1843: 'US',
	1844: 'US',
	1845: 'US',
	1847: 'US',
	1848: 'US',
	1849: 'DO',
	1850: 'US',
	1855: 'US',
	1856: 'US',
	1857: 'US',
	1858: 'US',
	1859: 'US',
	1860: 'US',
	1862: 'US',
	1863: 'US',
	1864: 'US',
	1865: 'US',
	1866: 'US',
	1867: 'CA',
	1868: 'TT',
	1869: 'KN',
	1870: 'US',
	1872: 'US',
	1873: 'CA',
	1876: 'JM',
	1877: 'US',
	1878: 'US',
	1888: 'US',
	1900: 'US',
	1901: 'US',
	1902: 'CA',
	1903: 'US',
	1904: 'US',
	1905: 'CA',
	1906: 'US',
	1907: 'US',
	1908: 'US',
	1909: 'US',
	1910: 'US',
	1912: 'US',
	1913: 'US',
	1914: 'US',
	1915: 'US',
	1916: 'US',
	1917: 'US',
	1918: 'US',
	1919: 'US',
	1920: 'US',
	1925: 'US',
	1928: 'US',
	1929: 'US',
	1930: 'US',
	1931: 'US',
	1935: 'US',
	1936: 'US',
	1937: 'US',
	1938: 'US',
	1939: 'PR',
	1940: 'US',
	1941: 'US',
	1947: 'US',
	1949: 'US',
	1951: 'US',
	1952: 'US',
	1954: 'US',
	1956: 'US',
	1959: 'US',
	1970: 'US',
	1971: 'US',
	1972: 'US',
	1973: 'US',
	1978: 'US',
	1979: 'US',
	1980: 'US',
	1984: 'US',
	1985: 'US',
	1989: 'US',
	20: 'EG',
	211: 'SS',
	212: 'MA',
	213: 'DZ',
	216: 'TN',
	218: 'LY',
	220: 'GM',
	221: 'SN',
	222: 'MR',
	223: 'ML',
	224: 'GN',
	225: 'CI',
	226: 'BF',
	227: 'NE',
	228: 'TG',
	229: 'BJ',
	230: 'MU',
	231: 'LR',
	232: 'SL',
	233: 'GH',
	234: 'NG',
	235: 'TD',
	236: 'CF',
	237: 'CM',
	238: 'CV',
	239: 'ST',
	240: 'GQ',
	241: 'GA',
	242: 'CG',
	243: 'CD',
	244: 'AO',
	245: 'GW',
	246: 'IO',
	247: 'AC',
	248: 'SC',
	249: 'SD',
	250: 'RW',
	251: 'ET',
	252: 'SO',
	253: 'DJ',
	254: 'KE',
	255: 'TZ',
	256: 'UG',
	257: 'BI',
	258: 'MZ',
	260: 'ZM',
	261: 'MG',
	262269: 'YT',
	262639: 'YT',
	262: 'RE',
	263: 'ZW',
	264: 'NA',
	265: 'MW',
	266: 'LS',
	267: 'BW',
	268: 'SZ',
	269: 'KM',
	27: 'ZA',
	290: 'SH',
	291: 'ER',
	297: 'AW',
	298: 'FO',
	299: 'GL',
	30: 'GR',
	31: 'NL',
	32: 'BE',
	33: 'FR',
	34: 'ES',
	350: 'GI',
	351: 'PT',
	352: 'LU',
	353: 'IE',
	354: 'IS',
	355: 'AL',
	356: 'MT',
	357: 'CY',
	358: 'FI',
	35818: 'AX',
	359: 'BG',
	36: 'HU',
	370: 'LT',
	371: 'LV',
	372: 'EE',
	373: 'MD',
	374: 'AM',
	375: 'BY',
	376: 'AD',
	377: 'MC',
	378: 'SM',
	379: 'VA',
	380: 'UA',
	381: 'RS',
	382: 'ME',
	385: 'HR',
	386: 'SI',
	387: 'BA',
	389: 'MK',
	39: 'IT',
	40: 'RO',
	41: 'CH',
	420: 'CZ',
	421: 'SK',
	423: 'LI',
	43: 'AT',
	441481: 'GG',
	441624: 'IM',
	441534: 'JE',
	44: 'GB',
	45: 'DK',
	46: 'SE',
	47: 'NO',
	4779: 'SJ',
	48: 'PL',
	49: 'DE',
	500: 'FK',
	501: 'BZ',
	502: 'GT',
	503: 'SV',
	504: 'HN',
	505: 'NI',
	506: 'CR',
	507: 'PA',
	508: 'PM',
	509: 'HT',
	51: 'PE',
	52: 'MX',
	53: 'CU',
	54: 'AR',
	55: 'BR',
	56: 'CL',
	57: 'CO',
	58: 'VE',
	590: 'GP',
	591: 'BO',
	592: 'GY',
	593: 'EC',
	594: 'GF',
	595: 'PY',
	596: 'MQ',
	597: 'SR',
	598: 'UY',
	5993: 'BQ',
	5994: 'BQ',
	5997: 'BQ',
	5999: 'CW',
	60: 'MY',
	61: 'AU',
	6189164: 'CX',
	6189162: 'CC',
	62: 'ID',
	63: 'PH',
	64: 'NZ',
	65: 'SG',
	66: 'TH',
	670: 'TL',
	6721: 'AQ',
	6723: 'NF',
	673: 'BN',
	674: 'NR',
	675: 'PG',
	676: 'TO',
	677: 'SB',
	678: 'VU',
	679: 'FJ',
	680: 'PW',
	681: 'WF',
	682: 'CK',
	683: 'NU',
	685: 'WS',
	686: 'KI',
	687: 'NC',
	688: 'TV',
	689: 'PF',
	690: 'TK',
	691: 'FM',
	692: 'MH',
	7: 'RU',
	76: 'KZ',
	77: 'KZ',
	800: 'XT',
	808: 'XS',
	81: 'JP',
	82: 'KR',
	84: 'VN',
	850: 'KP',
	852: 'HK',
	853: 'MO',
	855: 'KH',
	856: 'LA',
	86: 'CN',
	870: 'XN',
	878: 'XP',
	880: 'BD',
	881: 'XG',
	882: 'XV',
	883: 'XV',
	886: 'TW',
	90: 'TR',
	91: 'IN',
	92: 'PK',
	93: 'AF',
	94: 'LK',
	95: 'MM',
	960: 'MV',
	961: 'LB',
	962: 'JO',
	963: 'SY',
	964: 'IQ',
	965: 'KW',
	966: 'SA',
	967: 'YE',
	968: 'OM',
	970: 'PS',
	971: 'AE',
	972: 'IL',
	973: 'BH',
	974: 'QA',
	975: 'BT',
	976: 'MN',
	977: 'NP',
	98: 'IR',
	992: 'TJ',
	993: 'TM',
	994: 'AZ',
	995: 'GE',
	996: 'KG',
	998: 'UZ'
};

var ISO_3166 = {
	US: '1',
	CA: '1',
	AC: '247',
	AD: '376',
	AE: '971',
	AF: '93',
	AG: '1',
	AI: '1',
	AL: '355',
	AM: '374',
	AO: '244',
	AQ: '672',
	AR: '54',
	AS: '1',
	AT: '43',
	AU: '61',
	AW: '297',
	AX: '35818',
	AZ: '994',
	BA: '387',
	BB: '1',
	BD: '880',
	BE: '32',
	BF: '226',
	BG: '359',
	BH: '973',
	BI: '257',
	BJ: '229',
	BM: '1',
	BN: '673',
	BO: '591',
	BQ: '599',//5993,5994,5997
	BR: '55',
	BS: '1',
	BT: '975',
	BW: '267',
	BY: '375',
	BZ: '501',
	CC: '6189162',
	CD: '243',
	CF: '236',
	CG: '242',
	CH: '41',
	CI: '225',
	CK: '682',
	CL: '56',
	CM: '237',
	CN: '86',
	CO: '57',
	CR: '506',
	CU: '53',
	CV: '238',
	CW: '5999',
	CX: '6189164',
	CY: '357',
	CZ: '420',
	DE: '49',
	DJ: '253',
	DK: '45',
	DM: '1',
	DO: '1',
	DZ: '213',
	EC: '593',
	EE: '372',
	EG: '20',
	ER: '291',
	ES: '34',
	ET: '251',
	FI: '358',
	FJ: '679',
	FK: '500',
	FM: '691',
	FO: '298',
	FR: '33',
	GA: '241',
	GB: '44',
	GD: '1',
	GE: '995',
	GF: '594',
	GG: '441481',
	GH: '233',
	GI: '350',
	GL: '299',
	GM: '220',
	GN: '224',
	GP: '590',
	GQ: '240',
	GR: '30',
	GT: '502',
	GU: '1',
	GW: '245',
	GY: '592',
	HK: '852',
	HN: '504',
	HR: '385',
	HT: '509',
	HU: '36',
	ID: '62',
	IE: '353',
	IL: '972',
	IM: '441624',
	IN: '91',
	IO: '246',
	IQ: '964',
	IR: '98',
	IS: '354',
	IT: '39',
	JE: '441534',
	JM: '1',
	JO: '962',
	JP: '81',
	KE: '254',
	KG: '996',
	KH: '855',
	KI: '686',
	KM: '269',
	KN: '1',
	KP: '850',
	KR: '82',
	KW: '965',
	KY: '1',
	KZ: '7',
	LA: '856',
	LB: '961',
	LC: '1',
	LI: '423',
	LK: '94',
	LR: '231',
	LS: '266',
	LT: '370',
	LU: '352',
	LV: '371',
	LY: '218',
	MA: '212',
	MC: '377',
	MD: '373',
	ME: '382',
	MG: '261',
	MH: '692',
	MK: '389',
	ML: '223',
	MM: '95',
	MN: '976',
	MO: '853',
	MP: '1',
	MQ: '596',
	MR: '222',
	MS: '1',
	MT: '356',
	MU: '230',
	MV: '960',
	MW: '265',
	MX: '52',
	MY: '60',
	MZ: '258',
	NA: '264',
	NC: '687',
	NE: '227',
	NF: '6723',
	NG: '234',
	NI: '505',
	NL: '31',
	NO: '47',
	NP: '977',
	NR: '674',
	NU: '683',
	NZ: '64',
	OM: '968',
	PA: '507',
	PE: '51',
	PF: '689',
	PG: '675',
	PH: '63',
	PK: '92',
	PL: '48',
	PM: '508',
	PR: '1',
	PS: '970',
	PT: '351',
	PW: '680',
	PY: '595',
	QA: '974',
	RE: '262',
	RO: '40',
	RS: '381',
	RU: '7',
	RW: '250',
	SA: '966',
	SB: '677',
	SC: '248',
	SD: '249',
	SE: '46',
	SG: '65',
	SH: '290',
	SI: '386',
	SJ: '4779',
	SK: '421',
	SL: '232',
	SM: '378',
	SN: '221',
	SO: '252',
	SR: '597',
	SS: '211',
	ST: '239',
	SV: '503',
	SX: '1',
	SY: '963',
	SZ: '268',
	TC: '1',
	TD: '235',
	TG: '228',
	TH: '66',
	TJ: '992',
	TK: '690',
	TL: '670',
	TM: '993',
	TN: '216',
	TO: '676',
	TR: '90',
	TT: '1',
	TV: '688',
	TW: '886',
	TZ: '255',
	UA: '380',
	UG: '256',
	UY: '598',
	UZ: '998',
	VA: '379',
	VC: '1',
	VE: '58',
	VG: '1',
	VI: '1',
	VN: '84',
	VU: '678',
	WF: '681',
	WS: '685',
	XG: '881',
	XN: '870',
	XP: '878',
	XS: '808',
	XT: '800',
	XV: '882',
	//XV: '883',
	YE: '967',
	YT: '262',
	ZA: '27',
	ZM: '260',
	ZW: '263'
};

E164 = {}

// 原包自带函数，通过完整手机号找到对应的国家代码，比如传入+8613701914323，返回CN
E164.findIso3166 = function(phone) {
	if (typeof phone !== 'string' || phone.length < 10) {
		return;
	}
	if (phone.substring(0,1) === '1') {
		phone = parseInt(phone.substring(0,4)); //Always defined by four first digits
		return PHONE_PREFIX[phone];
	} else {
		var pref = phone.substring(0,7); //Defined by 1-7 digits
		while (pref.length > 0) {
			if (PHONE_PREFIX[parseInt(pref)]) {
				return PHONE_PREFIX[parseInt(pref)];
			} else {
				pref = pref.substring(0, pref.length-1);
			}
		}
	}
};

// 原包自带函数，通过国家代码找到对应的手机号前缀，比如传入CN，返回86(不是+86)
E164.findPhoneCountryCode = function(code) {
	if (typeof code !== 'string' && code.length !== 2) {
		return;
	}
	return ISO_3166[code];
};

// 增加的功能函数，利用上面两个函数，通过完整手机号找到对应去除手机号前缀的手机号，比如传入+8613701914323或8613701914323，返回13701914323
E164.getPhoneNumberWithoutPrefix = function(phone) {
	var code = E164.findIso3166(phone);
	if (typeof code !== 'string') {
		return;
	}
	var prefix = E164.findPhoneCountryCode(code);
	return phone.replace(prefix,"").replace("+","");
};

// 增加的功能函数，利用上面两个函数，通过完整手机号找到对应手机号前缀，比如传入+8613701914323或8613701914323，返回86(不是+86)
E164.getPhonePrefix = function(phone) {
	var code = E164.findIso3166(phone);
	if (typeof code !== 'string') {
		return;
	}
	return E164.findPhoneCountryCode(code);
};
/////////////////////////////////////////////////////////////////////////////////////////////

}).call(this);


/* Exports */
Package._define("steedos:e164-phones-countries", {
  E164: E164
});

})();
